/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux.components;

// {{{ imports
import jp.ize.ux.UXObject;
import jp.ize.ux.UXScalable;
import jp.ize.ux.UXResource;
import jp.ize.ux.UXRange;
import jp.ize.ux.UXController;
import jp.ize.ux.UXInteraction;
import jp.ize.ux.UXColor;
import jp.ize.ux.UXFocusManager;
import jp.ize.ux.states.UXBasicState;
import jp.ize.ux.acts.Act;
import jp.ize.ux.components.UXComponent;

#if flash9
import flash.text.TextField;
#elseif flash
import flash.TextField;
#end
// }}}
// {{{ class UXRadioButtonResource extends UXComponentResource
/**
 * UXRadioButtonResource クラス<br>
 * UXRadioButtonコンポーネントに利用されるリソース群です。
 */
class UXRadioButtonResource extends UXComponentResource
{
	// {{{ public var background( default, default ) : UXObject;
	/**
	 * チェックをする矩形部分のコンポーネントです。
	 */
	public var box( default, default ) : UXObject;
	// }}}
	// {{{ public var pushed(default, default) : UXResource
	/**
	 * チェックされた時に利用されるリソースです。
	 */
	public var checked(default, default) : UXResource;
	// }}}
	// {{{ public var released(default, default) : UXResource;
	/**
	 * チェックが解除された時に利用されるリソースです。
	 */
	public var unchecked(default, default) : UXResource;
	// }}}
}
// }}}
// {{{ enum UXRadioButtonActEvent
enum UXRadioButtonActEvent
{
}
// }}}
// {{{ class UXRadioButtonAct extends ActSubject<UXRadioButtonActEvent>
/**
 * UXRadioButtonAct クラス<br>
 * UXRadioButtonのデフォルトアクションです。
 */
class UXRadioButtonAct extends ActSubject<UXRadioButtonActEvent>
{
	// {{{ public function new()
	/**
	 * コンストラクタです。<br>
	 */
	public function new()
	{
		super();
	}
	// }}}
	// {{{ public function check( s : UXRadioButtonState ) : Void
	/**
	 * チェックが付けられた時のデフォルトアクションです。
	 */
	public function check( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function uncheck( s : UXRadioButtonState ) : Void
	/**
	 * チェックが外された時のデフォルトアクションです。
	 */
	public function uncheck( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function uplight( s : UXRadioButtonState ) : Void
	/**
	 * ボタンをハイライトした時のデフォルトアクションです。
	 */
	public function uplight( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function downlight( s : UXRadioButtonState ) : Void
	/**
	 * ボタンのハイライトを解除した時のデフォルトアクションです。
	 */
	public function downlight( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function focus( s : UXRadioButtonState ) : Void
	/**
	 * ボタンがフォーカスされた時のデフォルトアクションです。
	 */
	public function focus( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function unfocus( s : UXRadioButtonState ) : Void
	/**
	 * ボタンのフォーカスが解除された時のデフォルトアクションです。
	 */
	public function unfocus( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function disable( s : UXRadioButtonState ) : Void
	/**
	 * 無効にした時のデフォルトアクションです。
	 */
	public function disable( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function enable( s : UXRadioButtonState ) : Void
	/**
	 * 有効にした時のデフォルトアクションです。
	 */
	public function enable( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function show( s : UXRadioButtonState ) : Void
	/**
	 * 表示状態になった時のデフォルトアクションです。
	 */
	public function show( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
	// {{{ public function hide( s : UXRadioButtonState ) : Void
	/**
	 * 非表示状態になった時のデフォルトアクションです。
	 */
	public function hide( s : UXRadioButtonState ) : Void
	{
	}
	// }}}
}
// }}}
// {{{ class UXRadioButtonCoState
class UXRadioButtonCoState
{
	// {{{ public var selected(default, setSelected ) : Bool
	/**
	 * このボタンにフォーカスが当たっているかどうかを取得、または設定します。
	 */
	public var focused(default, default) : Bool;
	// }}}
	// {{{ public var highlighted(default, default) : Bool
	/**
	 * このボタンがハイライトされているかどうかを取得、または設定します。
	 */
	public var highlighted(default, default) : Bool;
	// }}}
}
// }}}
// {{{ enum UXRadioButtonExclusiveState
/**
 * UXRadioButtonの各種状況を表現します。
 */
enum UXRadioButtonExclusiveState
{
	/** 初期化状態にある事を意味します。*/
	INIT;
	/** 無効になっている事を意味します。*/
	DISABLE;
	/** 有効になっている事を意味します。パラメーターでは、フォーカスやハイライトの状況を保持します。*/
	ENABLE ( flags : UXRadioButtonCoState );
}
// }}}
// {{{ class UXRadioButtonState extends UXBasicState
/**
 * UXRadioButtonState クラス<br>
 * UXRadioButtonの現在の状態を表すオブジェクトです。
 */
class UXRadioButtonState extends UXBasicState
{
	// {{{ public var resource( default, default ) : UXRadioButtonResource;
	/**
	 * ラジオボタンの描画に使用するリソースです。
	 */
	public var resource( default, default ) : UXRadioButtonResource;
	// }}}
	// {{{ public var background( default, default ) : UXComponent
	/**
	 * チェックをする矩形部分のコンポーネントです。
	 */
	public var box( default, default ) : UXScalable;
	// }}}
	// {{{ public var text(default, default) : UXLabel;
	/**
	 * ラジオボタンに表示させるテキストです。デフォルトでは空文字列です。
	 */
	public var label(default, default) : UXLabel;
	// }}}
	// {{{ public var textAttribute(default, default) : UXTextAttribute
	/**
	 * テキストの表示状態を示します。
	 */
	public var textAttribute(default, default) : UXTextAttribute;
	// }}}
	// {{{ public var group( default, default ) : UXRadioButtonGroup
	/**
	 * このラジオボタンが属するUXRadioButtonGroupオブジェクトです。
	 */
	public var group( default, default ) : UXRadioButtonGroup;
	// }}}
	// {{{ public var checked(default, default) : Bool;
	/**
	 * 選択されているかどうかを示します。
	 */
	public var checked( default, default ) : Bool;
	// }}}
	// {{{ public var act(default, null) : UXRadioButtonAct
	/**
	 * デフォルトの動きです。
	 */
	public var acts(default, null) : UXRadioButtonAct;
	// }}}
	// {{{ public var condition( default, default) : UXRadioButtonExclusiveState;
	/**
	 * enableかどうかやフォーカスが当たっているかなど各種状況を保持する変数です。
	 */
	public var condition( default, default) : UXRadioButtonExclusiveState;
	// }}}
	// {{{ public var focusManager(default, default) : UXFocusManager
	/**
	 * このコンポーネントが属するフォーカスグループの管理オブジェクトです。
	 * このコンポーネントがフォーカスを受け取らない場合はnullです。
	 */
	public var focusManager(default, default) : UXFocusManager;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタです。
	 */
	public function new()
	{
		super();
		// 
		// TODO
		// リソースの設定
		// デフォルト値の設定
	}
	// }}}
	// {{{ private function attachResource() : Void
	/**
	 * グローバルなリソースをresourceプロパティに取得する関数です。
	 */
	private function attachResource() : Void
	{
	}
	// }}}
}
// }}}
// {{{ class UXRadioButton extends UXComponent
/**
 * UXRadioButtonクラス<br>
 * 複数の選択肢から一つだけユーザーに選択させるコンポーネントです。
 * このコンポーネントを使用する場合は、少なくとも二つ以上のRadioButtonインスタンスと、
 * それらが含まれるグループを構成して使用します。一つのグループ内では常に一つ以下だけしか選択できません。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXRadioButton extends UXComponent
{
	// {{{ properties

	private var _state : UXRadioButtonState;

	// }}}
	// {{{ public var ctrl : UXController<UXRadioButtonState>;
	/**
	 * このコンポーネント内でのインタラクションを管理するコントローラークラスのインスタンスです。
	 */
	public var ctrl : UXController<UXRadioButtonState>;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタです。
	 */
	public function new()
	{
		super();
	}
	// }}}
	// {{{ public function refreshResource() : Void
	/**
	 * グローバルなリソースを再取得する関数です。
	 */
	public function refreshResource() : Void
	{
	}
	// }}}
	// {{{ public function update( updator : UXRadioButtonState -> Void ) : Void
	/**
	 * このコンポーネントの状態を直接変更するメソッドです。状態のどんな操作も可能になるので、
	 * このメソッドの使用には注意が必要です。
	 */
	public function update( updator : UXRadioButtonState -> Void ) : Void
	{
		updator( _state );
	}
	// }}}
}
// }}}
// {{{ class UXRadioButtonInitInteraction extends UXInteraction<UXRadioButtonState>
/**
 * UXRadioButtonInitInteraction クラス<br>
 * ラジオボタンの初期化デフォルトインタラクションです。
 */
class UXRadioButtonInitInteraction extends UXInteraction<UXRadioButtonState>
{
}
// }}}
// {{{ class UXRadioButtonCheckInteraction extends UXInteraction<UXRadioButtonState>
/**
 * UXRadioButtonCheckInteraction クラス<br>
 * ラジオボタンがチェックされた、またはチェック解除されたことに対するデフォルトインタラクションです。
 */
class UXRadioButtonCheckInteraction extends UXInteraction<UXRadioButtonState>
{
}
// }}}
// {{{ class UXRadioButtonGroup
/**
 * UXRadioButtonGroupクラス<br>
 * 複数のラジオボタンの集まりを管理し、そのなかでは常に一つ以下のラジオボタンが選択されるようにします。
 */
class UXRadioButtonGroup
{
	// {{{ properties

	private var _array : Array<UXRadioButton>;

	// }}}
	// {{{ public var selection( getSelection, setSelection ) : UXRadioButton;
	/**
	 * 現在選択されているラジオボタンのインスタンスを返します。
	 */
	public var selection( getSelection, setSelection ) : UXRadioButton;
	// }}}
	// {{{ public function iterator() : Iterator<UXRadioButton>
	/**
	 * ラジオボタンのイテレイターを返します。このメソッドによってUXRadioButtonGroupをiterativeに扱うことができます。
	 */
	public function iterator() : Iterator<UXRadioButton>
	{
		return _array.iterator();
	}
	// }}}
	// {{{ private function getSelection() : UXRadioButton
	/**
	 *
	 */
	private function getSelection() : UXRadioButton
	{
		return null;
	}
	// }}}
	// {{{ private function setSelection( r : UXRadioButton ) : UXRadioButton
	/**
	 *
	 */
	private function setSelection( r : UXRadioButton ) : UXRadioButton
	{
		return null;
	}
	// }}}
}
// }}}
